/**
 * 状态模式
 * 1.代码具有可读性，将每个状态的行为都封装到对应的一个类中
 * 2.方便维护。将针对不同状态的 if else 进行消除
 * 3.符合开闭原则
 * 4.会产生很多类。每个状态都对应一个实现类，当状态类过多时会产生很多类，增加维护难度
 * 5.应用场景：当事件或者对象有多种状态，状态之间会互相转换，针对不同的状态要求有不同的行为（实现逻辑）可以考虑使用状态模式
 *
 * 状态与行为一一对应，当一个对象内在状态发送变化时，允许改变其行为。
 *
 * 类图：
 *  State Interface 状态接口，规定不用状态下行为的不同实现
 *  StateContext Class 环境角色，用于维护State实例，用于定义当前状态
 *  CurrentState Class 具体状态的实现类
 *
 *  Eg: APP抽奖 不可抽奖 (花费50积分)---> 可以抽奖 ---> 发放奖品 ---> 数量为0时奖品领完
 */
package com.design.patterns.list.state;